Vuetify is a popular UI framework for Vue apps.
In this article, we’ll look at how to work with the Vuetify framework.
Slide Item Active Class
We can change the active class of the slide items with the active-class
prop:
<template>
<v-container class="grey lighten-5">
<v-row>
<v-col>
<v-sheet class="mx-auto" elevation="8" max-width="800">
<v-slide-group
v-model="model"
class="pa-4"
prev-icon="mdi-minus"
next-icon="mdi-plus"
show-arrows
active-class="success"
>
<v-slide-item v-for="n in 15" :key="n" v-slot:default="{ active, toggle }">
<v-card
:color="active ? 'primary' : 'grey lighten-1'"
class="ma-4"
height="200"
width="100"
[@click](http://twitter.com/click "Twitter profile for @click")="toggle"
>
<v-row class="fill-height" align="center" justify="center">
<v-scale-transition>
<v-icon
v-if="active"
color="white"
size="48"
v-text="'mdi-close-circle-outline'"
></v-icon>
</v-scale-transition>
</v-row>
</v-card>
</v-slide-item>
</v-slide-group>
</v-sheet>
</v-col>
</v-row>
</v-container>
</template>
<script>
export default {
name: "HelloWorld",
data: () => ({
model: undefined,
}),
};
</script>
The show-arrows
prop make the navigation arrow show on both sies.
Also, we have the active-class
prop to style the selected item differently.
Mandatory
We can make at least one item be selected in the group with the mandatory
prop:
<template>
<v-container class="grey lighten-5">
<v-row>
<v-col>
<v-sheet class="mx-auto" elevation="8" max-width="800">
<v-slide-group
v-model="model"
class="pa-4"
prev-icon="mdi-minus"
next-icon="mdi-plus"
show-arrows
mandatory
>
<v-slide-item v-for="n in 15" :key="n" v-slot:default="{ active, toggle }">
<v-card
:color="active ? 'primary' : 'grey lighten-1'"
class="ma-4"
height="200"
width="100"
@click="toggle"
>
<v-row class="fill-height" align="center" justify="center">
<v-scale-transition>
<v-icon
v-if="active"
color="white"
size="48"
v-text="'mdi-close-circle-outline'"
></v-icon>
</v-scale-transition>
</v-row>
</v-card>
</v-slide-item>
</v-slide-group>
</v-sheet>
</v-col>
</v-row>
</v-container>
</template>
<script>
export default {
name: "HelloWorld",
data: () => ({
model: undefined,
}),
};
</script>
Now the first item will be selected by default.
Pseudo Carousel
We can display content below the selected slide.
For example, we can write:
<template>
<v-container class="grey lighten-5">
<v-row>
<v-col>
<v-sheet class="mx-auto" elevation="8" max-width="800">
<v-slide-group v-model="model" class="pa-4" show-arrows>
<v-slide-item v-for="n in 15" :key="n" v-slot:default="{ active, toggle }">
<v-card
:color="active ? 'primary' : 'grey lighten-1'"
class="ma-4"
height="200"
width="100"
@click="toggle"
>
<v-row class="fill-height" align="center" justify="center">
<v-scale-transition>
<v-icon
v-if="active"
color="white"
size="48"
v-text="'mdi-close-circle-outline'"
></v-icon>
</v-scale-transition>
</v-row>
</v-card>
</v-slide-item>
</v-slide-group>
<v-expand-transition>
<v-sheet v-if="model != null" color="grey lighten-4" height="200" tile>
<v-row class="fill-height" align="center" justify="center">
<h3 class="title">{{ model }}</h3>
</v-row>
</v-sheet>
</v-expand-transition>
</v-sheet>
</v-col>
</v-row>
</v-container>
</template>
<script>
export default {
name: "HelloWorld",
data: () => ({
model: undefined,
}),
};
</script>
We added the v-expand-transition
component below the v-slide-group
to show what we want to the user.
We’ll see a transition effect when we click on the item.
model
has the index of the item we clicked on.
Conclusion
We can add slides with the v-slide-group
component and let us select items when we click on it.